

package controladores;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

import modelos.MDB;
import modelos.MFabrica;
import modelos.MOrden;
import modelos.MOrden;
import modelos.MOrden;
import modelos.MProducto;
import vistas.VOrden;

public class COrden implements ActionListener{

    private VOrden vista;
    private MFabrica modelo;
    private Vector <? extends MDB> prodcutos;

    public COrden(VOrden aThis) {
        vista=aThis;
        modelo= new MProducto();
        prodcutos= modelo.listar();
        modelo= new MOrden();
        cargarDescripciones();

    }

    public void cargarDescripciones(){
        Vector<String> descripciones = new Vector<String>();
        for (int i = 0; i < prodcutos.size(); i++)
            descripciones.add(((MProducto)prodcutos.elementAt(i)).getDescripcion());
        vista.cargarComboProductos(descripciones);
    }

     public MProducto buscarProducto(String descrpicion){
        for (int i = 0; i < prodcutos.size(); i++)
            if(((MProducto)prodcutos.elementAt(i)).getDescripcion().equals(descrpicion))
                return ((MProducto) prodcutos.elementAt(i));
        return null;
    }

     public void actionPerformed(ActionEvent ae) {
        if(ae.getActionCommand().equals("Registrar")){
                registrar();
                
        }
        else if(ae.getActionCommand().equals("Consultar")){
            consultar();
        }
        else if(ae.getActionCommand().equals("Eliminar")){
            eliminar();
            vista.reiniciar();
        }
        else if(ae.getActionCommand().equals("Quitar")){
            vista.quitar();
        }
        else if(ae.getActionCommand().equals("Agregar")){
            agregar();
        }
        else if(ae.getActionCommand().equals("Salir")){
            vista.setVisible(false);
            vista.reiniciar();
        }
        else{
            vista.reiniciar();
        }
    }

    private void registrar() {
    	if(vista.validarNumeros()){
    		((MOrden) modelo).setCodigo(Integer.parseInt(vista.getTxtCodigo().getText()));
    	}
    	else
    		return;
    
        if(vista.validarCamposVacios())                
                    if(vista.validarFecha())
                        if(((MOrden) modelo).validarCodigo("Orden")){
                            ((MOrden) modelo).setNombre(vista.getTxtNombre().getText());
                            ((MOrden) modelo).setCedula(vista.getTxtCedula().getText());
                            ((MOrden) modelo).setTotal(Float.parseFloat(vista.getTxtTotal().getText()));
                            ((MOrden) modelo).setFecha(vista.getDtdFecha().getDate());
                            ((MOrden) modelo).setEstatus("A");
                            if(((MOrden) modelo).registrar()){
                                Vector<Integer> c = new Vector<Integer>();
                                Vector<Integer> p = new Vector<Integer>();
                                Vector<String []> v= vista.getInfoTabla();
                                for (int i = 0; i < v.size(); i++) {
                                    String [] s = v.elementAt(i);
                                    c.add(buscarProducto(s[0]).getCodigo());
                                    p.add(Integer.parseInt(s[1]));
                                }
                                ((MOrden) modelo).registarProductos(c, p);
                                for (int i = 0; i < c.size(); i++) {
                                    MProducto m = new MProducto();
                                    m.setCodigo(c.elementAt(i));
                                    m.actualizarStockIngredientes();
                                }
                                vista.reiniciar();
                                JOptionPane.showMessageDialog(new JFrame(),"La orden se ha registrado exitosamente","Comida Rapida",JOptionPane.INFORMATION_MESSAGE);

                            }
                        }
                        else
                            JOptionPane.showMessageDialog(new JFrame(),"El codigo ya se encuentra registrada","Comida Rapida",JOptionPane.INFORMATION_MESSAGE);
                    else;
        else;
    }

    private void consultar() {
        if(!vista.getTxtCodigo().getText().isEmpty()){
           ((MOrden) modelo).setCodigo(Integer.parseInt(vista.getTxtCodigo().getText()));
           ((MOrden) modelo).setEstatus("A");
           if(((MOrden) modelo).consultar()){
               vista.getTxtCedula().setText(((MOrden) modelo).getCedula());
               vista.getTxtNombre().setText(""+((MOrden) modelo).getNombre());
               vista.bloquear();
               Vector<String []> v = ((MOrden) modelo).listarProductos();
               for (int i = 0; i < v.size(); i++)
                   vista.agregarFila1(v.elementAt(i));
            }
           else
               JOptionPane.showMessageDialog(new JFrame(),"El codigo ingresado no pertenece a ningun Orden","Comida Rapida",JOptionPane.INFORMATION_MESSAGE);
        }
        else
           JOptionPane.showMessageDialog(new JFrame(),"El campo codigo esta vacio","Comida Rapida",JOptionPane.INFORMATION_MESSAGE);
    }

    private void eliminar() {
       if(!vista.getTxtCodigo().getText().isEmpty()){
           ((MOrden) modelo).setCodigo(Integer.parseInt(vista.getTxtCodigo().getText()));
           if(((MOrden) modelo).eliminar()){
               Vector<String []> v = ((MOrden) modelo).listarProductos();
               Vector<Integer> c = new Vector<Integer>();
               for (int i = 0; i < v.size(); i++)
                   c.add(Integer.parseInt(v.elementAt(i)[0]));
               ((MOrden) modelo).eliminarProductos(c);
               JOptionPane.showMessageDialog(new JFrame(),"El Orden se ha eliminado exitosamente","Comida Rapida",JOptionPane.INFORMATION_MESSAGE);

           }
           else
               JOptionPane.showMessageDialog(new JFrame(),"El codigo ingresado no pertenece a ningun Orden","Comida Rapida",JOptionPane.INFORMATION_MESSAGE);
        }
       else
           JOptionPane.showMessageDialog(new JFrame(),"El campo codigo esta vacio","Comida Rapida",JOptionPane.INFORMATION_MESSAGE);
    }

    private void agregar(){        
        String faltante = "";
        Vector<String[]> v= vista.getInfoTabla();
                MProducto producto = buscarProducto(vista.getTextoCmbProducto());
                int n =vista.getCantidad();
                for (int i = 0; i < n; i++) {
                    if(!producto.disponibilidadIngredientes(faltante)){
                            JOptionPane.showMessageDialog(new JFrame(),"No podemos atender su orden por que nos falta "+faltante,"Comida Rapida",JOptionPane.WARNING_MESSAGE);
                            return;
                    }
                }
                String [] s = new String [] {""+vista.getCmbProducto().getItemAt(vista.getCmbProducto().getSelectedIndex()),""+producto.getPrecio()};

                vista.agregarFila(s);
    }

}
